/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.adapters;

import java.util.ArrayList;
import java.util.List;
import org.cip.esymons.tesoreria.be.MovimientoCuenta;

/**
 *
 * @author Gilmar Montoya
 */
public class AdaptadorDeudaMovimientoAnual implements DeudaAnualInterfaz {

    private DeudaMovimiento deudaMovimiento;

    public AdaptadorDeudaMovimientoAnual(DeudaMovimiento deudaMovimiento) {
        this.deudaMovimiento = deudaMovimiento;
    }

    public List<CuotasPorAnio> getListaCuotasPorAnio() {
        try {
            List<CuotaMensual> lista = new ArrayList();
            boolean ban = true;
            CuotaMensual cm = null;
            for (MovimientoCuenta mc : deudaMovimiento.getListaMovimientos()) {
                if (ban) {
                    cm = new CuotaMensual();
                    cm.setDeuda(mc.getMcuSaldo());
                    cm.setCodigoSolicitante(mc.getFkSolCodigo().getSolCodigo());
                    cm.setAnio(mc.getMcuAnio());
                    cm.setMes(mc.getMcuMes());
                    cm.getListaMovimientos().add(mc);
                    ban = false;
                } else {
                    if (cm.getMes().equals(mc.getMcuMes())) {
                        cm.setDeuda(cm.getDeuda() + mc.getMcuSaldo());
                        cm.getListaMovimientos().add(mc);
                    } else {
                        lista.add(cm);

                        cm = new CuotaMensual();
                        cm.setDeuda(mc.getMcuSaldo());
                        cm.setCodigoSolicitante(mc.getFkSolCodigo().getSolCodigo());
                        cm.setAnio(mc.getMcuAnio());
                        cm.setMes(mc.getMcuMes());
                        cm.getListaMovimientos().add(mc);
                        ban = false;
                    }
                }
            }
            lista.add(cm);

            List<CuotasPorAnio> ldcm = new ArrayList<CuotasPorAnio>();
            int anio = 0;
            int mes = 0;
            CuotasPorAnio dcm = null;
            for (CuotaMensual cml : lista) {
                if (anio != cml.getAnio()) {
                    if (anio > 0) {
                        mes++;
                        while (mes <= 12 && mes > 1) {
                            CuotaMensual cmv = new CuotaMensual(0L, 0D, 0, 0, new ArrayList<MovimientoCuenta>(), false);
                            fijarValorCuota(mes, dcm, cmv);
                            mes++;
                        }
                        if (mes == 13) {
                            ldcm.add(dcm);
                        }
                    }
                    mes = 1;
                    anio = cml.getAnio();
                    dcm = new CuotasPorAnio();
                    dcm.setAnio(cml.getAnio());
                } else {
                    mes++;
                }
                while (mes < cml.getMes()) {
                    CuotaMensual cmv = new CuotaMensual(0L, 0D, 0, 0, new ArrayList<MovimientoCuenta>(), false);
                    fijarValorCuota(mes, dcm, cmv);
                    mes++;
                }
                fijarValorCuota(mes, dcm, cml);
                if (mes == 12) {
                    ldcm.add(dcm);
                    mes = 0;
                }
            }
            while (mes < 12 && mes > 0) {
                mes++;
                CuotaMensual cmv = new CuotaMensual(0L, 0D, 0, 0, new ArrayList<MovimientoCuenta>(), false);
                fijarValorCuota(mes, dcm, cmv);
            }
            if (mes == 12) {
                if (ldcm.size() > 0) {
                    if (ldcm.get(ldcm.size() - 1).getAnio() < anio) {
                        ldcm.add(dcm);
                    }
                } else {
                    if (lista.size() > 0) {
                        ldcm.add(dcm);
                    }
                }
            }
            return ldcm;
        } catch (Exception ex) {
            System.out.println("Error adpatadorDeudaMovimientoAnual:" + ex.getMessage());
            return new ArrayList<CuotasPorAnio>();
        }
    }

    private void fijarValorCuota(int mes, CuotasPorAnio dcm, CuotaMensual cm) {
        switch (mes) {
            case 1:
                dcm.setCuotaEnero(cm);
                break;
            case 2:
                dcm.setCuotaFebrero(cm);
                break;
            case 3:
                dcm.setCuotaMarzo(cm);
                break;
            case 4:
                dcm.setCuotaAbril(cm);
                break;
            case 5:
                dcm.setCuotaMayo(cm);
                break;
            case 6:
                dcm.setCuotaJunio(cm);
                break;
            case 7:
                dcm.setCuotaJulio(cm);
                break;
            case 8:
                dcm.setCuotaAgosto(cm);
                break;
            case 9:
                dcm.setCuotaSetiembre(cm);
                break;
            case 10:
                dcm.setCuotaOctubre(cm);
                break;
            case 11:
                dcm.setCuotaNoviembre(cm);
                break;
            case 12:
                dcm.setCuotaDiciembre(cm);
                break;
        }
    }

    public void setListaCuotasPorAnio(List<CuotasPorAnio> listaCuotasPorAnio) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /**
     * @return the deudaMovimiento
     */
    public DeudaMovimiento getDeudaMovimiento() {
        return deudaMovimiento;
    }

    /**
     * @param deudaMovimiento the deudaMovimiento to set
     */
    public void setDeudaMovimiento(DeudaMovimiento deudaMovimiento) {
        this.deudaMovimiento = deudaMovimiento;
    }
}
